package yxj03;

import java.io.*;

//用对象序列化流序列化了一个对象后，加入我们修改了对象所属于的类文件，读取数据会不会出问题？会
/*
* InvalidClassException: yxj03.Student; local class incompatible:
* stream classdesc serialVersionUID = -433393726768176058,
* local class serialVersionUID = 8230811042854827771
*当序列化运行时检测到类中的以下问题之一时抛出。
    类的串行版本与从流中读取的类描述符的类型不匹配
    该类包含未知的数据类型
    该类没有可访问的无参数构造函数

* */


//如果出问题了，怎么解决：
//给这个对象所属的类加一个值，private static final long serialVersionUIO = 42L;


//如果一个对象中的某个值不想被序列化，怎么做呢？
//把成员变量使用transient修饰,被这个关键字所修饰的是不被参与序列化的

public class ObjectStreamDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        write();
        read();
    }

    private static void read() throws IOException ,ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\Ccode\\java-se\\IOStream\\src\\oos.txt"));
        Object obj =  ois.readObject();
        Student s = (Student) obj;
        System.out.println(s.getName()+","+ s.getAge());
        ois.close();
    }

    private static void write() throws IOException,ClassNotFoundException{
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\Ccode\\java-se\\IOStream\\src\\oos.txt"));
        Student s = new Student("yxj",222);
        oos.writeObject(s);
        oos.close();
    }
}
